﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CityGames
{
    public partial class FormEventosGestion : Form
    {
        static private Torneo torneo = new Torneo();
        static private Plataforma plataforma = new Plataforma();

        private FormContenedor contenedor;
        private const int numeroDeJuegosPorPagina = 12;
        private int numeroDePaginaActual;
        private int numeroDePaginasMaximo;

        private DataSet dsEventos;

        public FormEventosGestion()
        {
            InitializeComponent();
        }

        private void FormEventosMostrar_Load(object sender, EventArgs e)
        {
            try
            {
                contenedor = (FormContenedor)MdiParent;
                dsEventos = new DataSet();

                numeroDePaginaActual = 1;

                dtpFechaInicio.Value = torneo.ObtenerFechaMinima();
                dtpFechaFin.Value = torneo.ObtenerFechaMaxima();
                tbNombre.Text = "";
                tbJuego.Text = "";

                cbPlataforma.Items.Add("Todas");
                foreach (DataRow row in plataforma.ObtenerPlataformas().Rows)
                {
                    cbPlataforma.Items.Add(row[0].ToString());
                }
                cbPlataforma.SelectedItem = cbPlataforma.Items[0];

                bInscribir.Enabled = false;
                bCerrar.Enabled = false;

                //rbTorneo.Checked = true;

                CargarDataGridViewEventos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bMostrarTodos_Click(object sender, EventArgs e)
        {
            try
            {
                MostrarTodos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void MostrarTodos()
        {
            try
            {
                tbNombre.Text = "";
                tbNombre.Focus();
                tbJuego.Text = "";
                cbPlataforma.SelectedItem = cbPlataforma.Items[0];
                dtpFechaInicio.Value = torneo.ObtenerFechaMinima();
                dtpFechaFin.Value = torneo.ObtenerFechaMaxima();
                cboxAbierto.Checked = false;
                rbTorneo.Checked = true;

                numeroDePaginaActual = 1;

                CargarDataGridViewEventos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btVisualizar_Click(object sender, EventArgs e)
        {
            try
            {
                if (rbTorneo.Checked)
                {
                    if (dgvEventos.SelectedRows.Count == 1)
                    {
                        switch (dgvEventos.SelectedRows[0].Cells["Estado"].Value.ToString())
                        {
                            case "Inscripciones":
                                if (contenedor.hijoFormEventosAltaTorneo.VisualizarTorneo(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString()))
                                {

                                    contenedor.hijoFormEventosAltaTorneo.Focus();
                                }
                                break;
                            case "Grupos":
                                if (contenedor.hijoFormEventosAltaTorneo.VisualizarTorneo(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString()))
                                {
                                    contenedor.hijoFormEventosGruposT.CargarGrupos(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString());
                                    contenedor.hijoFormEventosGruposT.Focus();
                                }
                                break;
                            case "Eliminatorias":
                                if (contenedor.hijoFormEventosAltaTorneo.VisualizarTorneo(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString()))
                                {
                                    contenedor.hijoFormEventosGruposT.CargarGrupos(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString());
                                    contenedor.hijoFormEventosBracketsT.CargarBracketsDeTorneo(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString());
                                    contenedor.hijoFormEventosBracketsT.Focus();
                                }
                                break;
                            case "Finalizado":
                                if (contenedor.hijoFormEventosAltaTorneo.VisualizarTorneo(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString()))
                                {
                                    contenedor.hijoFormEventosGruposT.CargarGrupos(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString());
                                    contenedor.hijoFormEventosBracketsT.CargarBracketsDeTorneo(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString());
                                    contenedor.hijoFormEventoFinalizado.RellenarNombres(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString());
                                    contenedor.hijoFormEventoFinalizado.Focus();
                                }
                                break;
                            default:
                                MessageBox.Show("El torneo se encuentra en un estado no controlado.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                break;
                        }
                    }
                    else
                    {
                        MessageBox.Show("Debe seleccionar un solo torneo.    ", "Seleccionar un torneo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    //Visualizar Liga
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bEditar_Click(object sender, EventArgs e)
        {
            try
            {
                if (rbTorneo.Checked)
                {
                    if (dgvEventos.SelectedRows.Count == 1)
                    {
                        if (contenedor.hijoFormEventosAltaTorneo.ModificarTorneo(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString()))
                            contenedor.hijoFormEventosAltaTorneo.Focus();
                    }
                    else
                    {
                        MessageBox.Show("Debe seleccionar un solo torneo.    ", "Seleccionar un torneo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    //Editar Liga
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bBorrar_Click(object sender, EventArgs e)
        {
            try
            {
                int juegosEliminados = 0;

                if (rbTorneo.Checked)
                {
                    if (dgvEventos.SelectedRows.Count > 0)
                    {
                        if (MessageBox.Show("¿Realmente desea eliminar los Torneos seleccionados?", "Confirmar eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                        {
                            foreach (DataGridViewRow row in dgvEventos.SelectedRows)
                            {
                                if (torneo.EliminarTorneo(row.Cells[0].Value.ToString()))
                                    juegosEliminados++;

                            }

                            if (juegosEliminados > 0)
                            {
                                CargarDataGridViewEventos();
                                MessageBox.Show(juegosEliminados.ToString() + " torneo(s) eliminado(s) correctamente.    ", "Eliminación exitosa.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                            else
                            {
                                MessageBox.Show("Ocurrión un error durante la eliminación.    ", "Eliminación fallida.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("Debe seleccionar almenos un torneo.    ", "Seleccionar torneos para eliminar.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    //Codigo para borrar Liga(s)
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bInscribir_Click(object sender, EventArgs e)
        {
            try
            {
                if (rbTorneo.Checked)
                {
                    contenedor.hijoFormEventosInscribirSocios.RellenarDatosDeTorneo(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString());
                    contenedor.hijoFormEventosInscribirSocios.Focus();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bCerrar_Click(object sender, EventArgs e)
        {
            try
            {
                if (torneo.ObtenerNumeroDeParticipantesDeTorneo(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString()) == torneo.ObtenerNumeroDeSociosInscritos(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString()))
                {
                    if (MessageBox.Show("¿Esta seguro de que desea cerrar las inscripciones?    ", "Confirmar", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        if (torneo.CerrarInscripcionesDeTorneo(dgvEventos.SelectedRows[0].Cells["Nombre"].Value.ToString()))
                        {
                            MessageBox.Show("            Inscripciones cerradas exitosamente.\nTodos los Participantes han sido repartidos aleatoriamente.", "Inscripciones cerradas.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            CargarDataGridViewEventos();
                        }
                        else
                            MessageBox.Show("Se produjo un error al cerrar las inscripciones.\n     Las inscripciones no han sido cerradas.", "Errro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    MessageBox.Show("No se pueden cerrar las inscripciones del torneo seleccionado.\n              Número de participantes incorrecto.", "Número de participantes incorrecto", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVUltimaPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = numeroDePaginasMaximo;
                CargarDataGridViewEventos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual < numeroDePaginasMaximo)
                {
                    numeroDePaginaActual++;
                    CargarDataGridViewEventos();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual > 1)
                {
                    numeroDePaginaActual--;
                    CargarDataGridViewEventos();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPrimeraPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewEventos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void CargarDataGridViewEventos()
        {
            try
            {
                if (rbTorneo.Checked)
                    numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(torneo.ObtenerNumeroDeEventosFiltrados(tbNombre.Text, tbJuego.Text, cbPlataforma.Text, dtpFechaInicio.Value, dtpFechaFin.Value, cboxAbierto.Checked).ToString()) / numeroDeJuegosPorPagina).ToString());
                else
                    dsEventos = new DataSet(); // Ligas

                if (numeroDePaginaActual == 0)
                    numeroDePaginaActual = 1;

                if (numeroDePaginaActual > numeroDePaginasMaximo)
                    numeroDePaginaActual = numeroDePaginasMaximo;

                if (rbTorneo.Checked)
                    dsEventos = torneo.ObtenerEventosFiltrados(tbNombre.Text, tbJuego.Text, cbPlataforma.Text, dtpFechaInicio.Value, dtpFechaFin.Value, cboxAbierto.Checked, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                else
                    dsEventos = new DataSet(); // Ligas

                dgvEventos.DataSource = dsEventos;
                dgvEventos.DataMember = "EventosFiltrados";
                lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();

                if (numeroDePaginaActual <= 1)
                {
                    bDGVPaginaAnterior.Enabled = false;
                    bDGVPrimeraPagina.Enabled = false;
                }
                else
                {
                    bDGVPaginaAnterior.Enabled = true;
                    bDGVPrimeraPagina.Enabled = true;
                }

                if (numeroDePaginaActual == numeroDePaginasMaximo)
                {
                    bDGVPaginaSiguiente.Enabled = false;
                    bDGVUltimaPagina.Enabled = false;
                }
                else
                {
                    bDGVPaginaSiguiente.Enabled = true;
                    bDGVUltimaPagina.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tbNombre_TextChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewEventos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void cbPlataforma_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewEventos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tbJuego_TextChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewEventos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dtpFechaInicio_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewEventos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dtpFechaFin_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewEventos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void cboxAbierto_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewEventos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbTorneo_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (rbTorneo.Checked)
                {
                    lbTitulo.Text = "Gestionar Torneos";
                    gbFiltroEventos.Text = "Buscar Torneos";
                    bBorrar.Text = "Borrar Torneo(s)";
                }
                else
                {
                    lbTitulo.Text = "Gestionar Ligas";
                    gbFiltroEventos.Text = "Buscar Ligas";
                    bBorrar.Text = "Borrar Liga(s)";
                }
                numeroDePaginaActual = 1;
                CargarDataGridViewEventos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dgvEventos_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                if (dgvEventos.SelectedRows.Count == 1)
                {
                    if (dgvEventos.SelectedRows[0].Cells["Estado"].Value.ToString() == "Inscripciones")
                    {
                        bInscribir.Enabled = true;
                        bCerrar.Enabled = true;
                    }
                    else
                    {
                        bInscribir.Enabled = false;
                        bCerrar.Enabled = false;
                    }

                    bVisualizar.Enabled = true;
                    bEditar.Enabled = true;
                }
                else
                {
                    bInscribir.Enabled = false;
                    bCerrar.Enabled = false;
                    bVisualizar.Enabled = false;
                    bEditar.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se ha producido un error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
